package com.demo;

/*
    -- 一元算术运算符：
        明确：只需要一个操作数就能完成运算的运算符
        分类： ++ , --
        引入：让一个变量num 加1 之后再赋值给自己

        ++ : 自增运算符
            单独使用： 95%
                1.++num 和 num-- 没有区别
                2.使用场景： 在循环结构中
            参与其他运算： 5%
                1. num++ ：先让 num参与其他运算，算完之后再让 num自增
                2. ++num ：先让 num自增， 自增之后的值再参与其他运算
        -- : 自减运算符 类似自增运算符

[练习]
    1. int a = 3, b = 4; 求 a++ / 3 + --b * 2 - a-- % 6 + b++ * 3 - ++b的值

    补充：a++ / 3 + --b * 2 - a-- % 6 + b++ * 3 - ++b 表达式的结果的数据类型是 int 即表达式组成的最高数据类型
    分析: (a++ / 3) + (--b * 2 )- (a-- % 6) + (b++ * 3) - (++b)
        1. 以 a = 3, b = 4 算： (a++ / 3) : a / 3 = 1,    a = 4
        2. 以 a = 4, b = 4 算： (--b * 2) : b = 3,        b * 2 = 6
        3. 以 a = 4, b = 3 算： (a-- % 6) : a % 6 = 4,    a = 3
        4. 以 a = 3, b = 3 算： (b++ * 3) : b * 3 = 9,    b = 4
        5. 以 a = 3, b = 4 算： (++b) :     ++b = 5,      b = 5
            --> result = 1 + 6 - 4 + 9 - 5 = 7
            --> a = 3, b = 5

 */


/*
    -- 赋值运算符：
        明确： Java中， = (赋值运算符)， == (等于)
        分类：
          --1. 普通赋值运算符： =
                含义：将 右边表达式运算的结果 赋值给 左边的变量 接收
                例如： int num = 8 - 2
          --2. 特殊赋值运算符： += , -= , *= , /= , %=
                说明：
                    1. 以 += 为例， += 之间不能有空格，是 + 和 = 的组合
                    2. a += b 等价于 a = (a的数据类型)(a + (b))
                       a -= b 等价于 a = (a的数据类型)(a - (b))
                       a *= b 等价于 a = (a的数据类型)(a * (b))
                       a /= b 等价于 a = (a的数据类型)(a / (b))
                       a %= b 等价于 a = (a的数据类型)(a % (b))
                       结论： 1. b 可以是常量，变量，表达式 的值
                             2. 特殊赋值运算符 隐含了强制类型转换

 */

/*
[练习]
    1. 交换两个变量的值(用两种方式实现)
        int a = 3, b = 5;
    分析：
        1. 使用临时变量temp
            int temp = a;
            a = b;
            b = temp;
            优点：思路简单
            缺点：浪费内存
        2. 使用一加两减的口诀
            a = a + b;
            b = a - b;
            a = a - b;
            优点：节约内存
            缺点：思路复杂
        3. 使用异或位运算  位运算符讲解
 */
public class Demo3 {
    public static void main(String[] args) {
        int a=3;
        int b=5;

        a = a+b; //a=8
        b = a-b; //b=3
        a = a-b; //a=5

        /*int c;
        c=a;
        a=b;
        b=c;*/

        /*int c[]={3,5};
        a=c[1];
        b=c[0];*/

        System.out.println("a = " + a);
        System.out.println("b = " + b);


    }
}
